﻿using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;

namespace WindowsGame1
{
    class Fase1 : GerenciadorTelas
    {
        Texture2D texturaFundo;
        Nave nave;
        GerenciadorAsteroide gerenciadorAsteroide;
        GerenciadorItens gerenciadorItens;
        HUD hud;
        SoundEffect soundExplosao, soundColisaoItem;
        SpriteFont fonte;

        public Fase1(ContentManager Content, GameWindow gw)
        {
            texturaFundo = Content.Load<Texture2D>("spacebackground");

            nave = new Nave(Content, Content.Load<Texture2D>("nave"), gw);

            gerenciadorAsteroide = new GerenciadorAsteroide(Content.Load<Texture2D>("meteoro_verde"), gw);

            gerenciadorItens = new GerenciadorItens(Content);

            hud = new HUD(Content.Load<Texture2D>("vida"));

            fonte = Content.Load<SpriteFont>("arial");
            
            soundExplosao = Content.Load<SoundEffect>("Explosion1");

            soundColisaoItem = Content.Load<SoundEffect>("escolha3");            
        }

        public new void Update(GameTime gameTime, KeyboardState tecladoAtual, KeyboardState tecladoAnterior, GamePadState gamePadAtual, GamePadState gamePadAnterior)
        {

            if ((Game1.ApertouJoystick(Buttons.X)) || (Game1.ApertouTeclado(Keys.X)))
            {
                estadoAtual = Estados.MENUiTENS;
            }


            if ((Game1.ApertouJoystick(Buttons.Start)) || (Game1.ApertouTeclado(Keys.M)))
            {
                estadoAtual = Estados.MENU;
                Reiniciar(true,gameTime);
            }

            for (int j = 0; j < GerenciadorAsteroide.lista.Count; j++)
            {
                if ((GerenciadorAsteroide.lista[j].recColisao.Intersects(nave.RecColisao))
                      && (GerenciadorAsteroide.lista[j].visivel))
                {
                    soundExplosao.Play();
                    GerenciadorAsteroide.lista[j].visivel = false;
                    hud.quantidadeVida--;
                    nave.ColocandoNaPosicaoInicial();

                    if (hud.quantidadeVida == 0)
                    {
                        estadoAtual = Estados.GAMEOVER;
                        Reiniciar(true, gameTime); // ir para a tela de Game Over?!?!?!?!
                    }
                }
            }

            for (int i = 0; i < GerenciadorItens.lista.Count; i++)
            {
                if ((GerenciadorItens.lista[i].recPosicaoItem.Intersects(nave.RecColisao)))
                {
                    //faz os itens serem guardados 
                    
                    soundColisaoItem.Play();
                    MenuItens.listaItensGuardados.Add(GerenciadorItens.lista[i]);

                    if (GerenciadorItens.lista[i].tipoItem == 0) // chave
                        MenuItens.itemChave.Add(GerenciadorItens.lista[i]);
                   
                    if (GerenciadorItens.lista[i].tipoItem == 1) // rupie
                        MenuItens.itemRupie.Add(GerenciadorItens.lista[i]);
                    
                    if (GerenciadorItens.lista[i].tipoItem == 2) // estrela
                        MenuItens.itemEstrela.Add(GerenciadorItens.lista[i]);

                    if (GerenciadorItens.lista[i].tipoItem == 2)
                    {
                        hud.quantidadeVida++;
                    }

                    GerenciadorItens.lista.RemoveAt(i);
                }
            }

            gerenciadorAsteroide.Update(gameTime);

            gerenciadorItens.Update(gameTime);
            nave.Update(gameTime, tecladoAtual, tecladoAnterior, gamePadAtual, gamePadAnterior);
            hud.Update(gameTime);

        }

        public void Reiniciar(bool sair, GameTime gameTime)
        {
            nave.ColocandoNaPosicaoInicial();
            gerenciadorAsteroide.ListaAsteroide.Clear();
            GerenciadorTiro.lista.Clear();
            hud.quantidadeVida = 5;
            HUD.pontuacao = 0;
            MenuItens.listaItensGuardados.Clear();
            GerenciadorItens.tempoParaAparecer = gameTime.TotalGameTime.TotalMilliseconds;
        }

        public new void Draw(GameTime gameTime, SpriteBatch spriteBatch)
        {
            spriteBatch.Draw(texturaFundo, Vector2.Zero, Color.LightGray);

            nave.Draw(gameTime, spriteBatch);

            gerenciadorAsteroide.Draw(spriteBatch);

            gerenciadorItens.Draw(gameTime, spriteBatch);
            hud.Draw(gameTime, spriteBatch);
            spriteBatch.DrawString(fonte, "vida: " + hud.quantidadeVida, new Vector2(10, 30), Color.White);
            spriteBatch.DrawString(fonte, "Pontuação: " + HUD.pontuacao, new Vector2(250, 0), Color.White);
            spriteBatch.DrawString(fonte, "aste: " + GerenciadorAsteroide.lista.Count.ToString(), new Vector2(250, 15), Color.White);

        }
    }
}
